
/*
代码中体现多态性，就是父类应用指向子类的对象  （本质上是对象的向上转型）

格式：
父类名称/接口名称  对象名 = new 子类名称（）;
*/

 public class duotai{
     public static void main(String[] args) {
         fu.obj = new zi();
         obj.method();                   //引用子类的方法
         obj.methodfu();                 //引用了父类方法
         //其实就是”将猫叫做动物“
         System.out.println(obj.num);     //√
         System.out.println(obj.age);     //×  因为只可以向上查找，不能向下到子系中查找
         //obj.methodfu();                //此处如果被子类override之后，就会调用子类的方法，如果没有，就是父类的方法
     }
 }
/*
成员变量使用中只能用其父系中的变量，父系前面承接的如果没有extends就是继承了object，而object中并没有age

成员方法调用时看new是谁，就优先用谁，没有就向上找

好处：无论右边的new换成了什么子类对象，都可以调用子类其中override父类之后的的同名办法！
*/

 public class fu{
     int num = 10;
     public void method(){

     }
     public void methodfu(){

     }
 }

 public class zi extends fu{
     int num = 10;
     int age = 20;
     public void method(){

     }
     /*
     @override
     public void methodfu(){

     }                          //这里是子类的覆盖重写
     */
 }

 /*
 向上转型与向下转型

 向上转型：本质上是多态（创建一个子类对象当作父类使用）  创建了一只猫，把它当作动物看
 ”向上转型一定是安全的“

 向下转型：本质上是一个还原的动作（将父类对象还原成一个子类对象）    将动物还原成一只猫
 //承接上面的fu obj = new zi();
 此时要还原成子类，就：
 zi zi = (zi) obj;    //还原成子类

 注意事项：
 1.要保证创建的时候就是子类，不然无法转型
 2.如果创建的时候不是子类要向下转型的话就会报错（类转换异常）

 如何来确认这个父类引用的对象是哪个子类？

 对象 instanceof 类名称
这样可以得到一个Boolean结果，判断前面的对象能不能当作后面类型的实例
确定了是不是子类再向下转型
一般用if判断可以之后再转型 
  */

public void useDevice(USB usb){
    //主体
    //可以直接调用接口和类，比如usb.open();
}
//此处USB为一个接口，接口和类都可以成为参数的一种（指括号里的内容）
